package sw

import (
	"hash"

	"blockchain/bccsp"
)

// 该处所有接口都是分BCCSP的分接口,所有注释参照BCCSP

// KeyGenerator是一个类似bccsp的接口，提供密钥生成算法
type KeyGenerator interface {

	//key产生算法
	KeyGen(opts bccsp.KeyGenOpts) (k bccsp.Key, err error)
}

// KeyDeriver 提供Key派生算法
type KeyDeriver interface {
	// 该方法从一个k 派生一个dk
	KeyDeriv(k bccsp.Key, opts bccsp.KeyDerivOpts) (dk bccsp.Key, err error)
}

// KeyImporter
type KeyImporter interface {
	KeyImport(raw interface{}, opts bccsp.KeyImportOpts) (k bccsp.Key, err error)
}

// 加密器
type Encryptor interface {

	//使用秘钥k 加密 明文plaintext
	Encrypt(k bccsp.Key, plaintext []byte, opts bccsp.EncrypterOpts) (ciphertext []byte, err error)
}

// 解密者
type Decryptor interface {
	Decrypt(k bccsp.Key, ciphertext []byte, opts bccsp.DecrypterOpts) (plaintext []byte, err error)
}

// 签名者
type Signer interface {
	Sign(k bccsp.Key, digest []byte, opts bccsp.SignerOpts) (signature []byte, err error)
}

// 验证者
type Verifier interface {
	Verify(k bccsp.Key, signature, digest []byte, opts bccsp.SignerOpts) (valid bool, err error)
}

// Hash者
type Hasher interface {
	Hash(msg []byte, opts bccsp.HashOpts) (hash []byte, err error)

	GetHash(opts bccsp.HashOpts) (h hash.Hash, err error)
}
